/**   
 * @Title: ApiInterceptor.java
 * @Package com.wx.interceptor
 * @Description: 
 * @author wangxiao
 * @date 2017年11月11日 上午11:40:42
 */
package com.wx.interceptor;

import com.eova.common.utils.xx;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.wx.controller.ApiController;
import com.wx.model.WxAccount;
import com.wx.service.AccountService;
import com.xiaoleilu.hutool.util.StrUtil;
/**   
 * @ClassName: ApiInterceptor
 * @Description: 
 * @author wangxiao
 * @date 2017年11月11日 上午11:40:42
 */
public class ApiInterceptor implements Interceptor {

	static final AccountService accountService = AccountService.me;
    @Override
	public void intercept(Invocation inv) {
        Controller controller = inv.getController();
        if (!(controller instanceof ApiController))
            throw new RuntimeException("控制器需要继承 ApiController");
        try {
        	String appId = "";
        	String apptype = "";
        	if(!StrUtil.isBlank(controller.getPara("appid"))){
        		appId = controller.getPara("appid");
        		controller.getSession().setAttribute("appid", appId);
        		
        	}else{
        		if(!StrUtil.isBlank((String)controller.getSession().getAttribute("appid"))){
        			appId= (String)controller.getSession().getAttribute("appid");
        			
            	}
        	}
        	if(!StrUtil.isBlank(controller.getPara("apptype"))){
        		apptype = controller.getPara("apptype");
        		if("0".equals(apptype)){
        			apptype ="";
        			controller.getSession().setAttribute("apptype", apptype);
        		}else{
        			
                	controller.getSession().setAttribute("apptype", apptype);
        		}
        	}
        	else{
        		if(!StrUtil.isBlank((String)controller.getSession().getAttribute("apptype"))){
        			apptype= (String)controller.getSession().getAttribute("apptype");
        			
            	}
        	}
        	WxAccount wx = null;
        	if(StrUtil.isEmpty(apptype)){
        		wx = accountService.getAccountByAppid(appId);
        	}else{
        		wx = accountService.getAccountByAppid(appId,apptype);
        	}
        	
			controller.getSession().setAttribute("WXACCOUNT", wx);
        	//APPID 替换时  修改session值
        	if(!appId.equals(wx.getAppid())){
        		controller.removeSessionAttr("USER");
        		controller.removeSessionAttr("WXACCOUNT");
        		controller.redirect(xx.getConfig("domain")+"/oauth/toOauth?appid="+appId+"&apptype="+apptype);
        		return;
        	}
        	if("wx3f8913eb9dd15240".equals(wx.getAppid())||"wx3a61fdeeb89ed828".equals(wx.getAppid())){
        		//国际速运
        		controller.getSession().setAttribute("BNORDER", true);
        	}
        	System.out.println("==========="+inv.getActionKey());
        	if(controller.getSessionAttr("USER") == null && !inv.getActionKey().startsWith("/oauth")){
        		controller.redirect(xx.getConfig("domain")+"/oauth/toOauth?appid="+appId+"&apptype="+apptype);
        		return;
        	}
            // 将 appId 与当前线程绑定，以便在后续操作中方便获取ApiConfig对象： ApiConfigKit.getApiConfig();
            ApiConfigKit.setThreadLocalAppId(appId);
            inv.invoke();
        } finally {
            ApiConfigKit.removeThreadLocalAppId();
        }
    }
}

